home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Personal Computer World 2009 February
/
PCWFEB09.iso
/
Software
/
Resources
/
Chat & Communication
/
Digsby build 37
/
digsby_setup.exe
/
lib
/
M2Crypto
/
SMIME.pyo
(
.txt
)
< prev
next >
Wrap
Python Compiled Bytecode
|
2008-10-13
|
9KB
|
283 lines
# Source Generated with Decompyle++
# File: in.pyo (Python 2.5)
import BIO
import EVP
import X509
import Err
import util
import m2
PKCS7_TEXT = m2.PKCS7_TEXT
PKCS7_NOCERTS = m2.PKCS7_NOCERTS
PKCS7_NOSIGS = m2.PKCS7_NOSIGS
PKCS7_NOCHAIN = m2.PKCS7_NOCHAIN
PKCS7_NOINTERN = m2.PKCS7_NOINTERN
PKCS7_NOVERIFY = m2.PKCS7_NOVERIFY
PKCS7_DETACHED = m2.PKCS7_DETACHED
PKCS7_BINARY = m2.PKCS7_BINARY
PKCS7_NOATTR = m2.PKCS7_NOATTR
PKCS7_SIGNED = m2.PKCS7_SIGNED
PKCS7_ENVELOPED = m2.PKCS7_ENVELOPED
PKCS7_SIGNED_ENVELOPED = m2.PKCS7_SIGNED_ENVELOPED
PKCS7_DATA = m2.PKCS7_DATA
class PKCS7_Error(Exception):
pass
m2.pkcs7_init(PKCS7_Error)
class PKCS7:
m2_pkcs7_free = m2.pkcs7_free
def __init__(self, pkcs7 = None, _pyfree = 0):
if pkcs7 is not None:
self.pkcs7 = pkcs7
self._pyfree = _pyfree
else:
self.pkcs7 = m2.pkcs7_new()
self._pyfree = 1
def __del__(self):
if getattr(self, '_pyfree', 0):
self.m2_pkcs7_free(self.pkcs7)
def _ptr(self):
return self.pkcs7
def type(self, text_name = 0):
if text_name:
return m2.pkcs7_type_sn(self.pkcs7)
else:
return m2.pkcs7_type_nid(self.pkcs7)
def write(self, bio):
return m2.pkcs7_write_bio(self.pkcs7, bio._ptr())
def write_der(self, bio):
return m2.pkcs7_write_bio_der(self.pkcs7, bio._ptr())
def get0_signers(self, certs, flags = 0):
return X509.X509_Stack(m2.pkcs7_get0_signers(self.pkcs7, certs.stack, flags), 1)
def load_pkcs7(p7file):
bio = m2.bio_new_file(p7file, 'r')
if bio is None:
raise Err.get_error()
try:
p7_ptr = m2.pkcs7_read_bio(bio)
finally:
m2.bio_free(bio)
if p7_ptr is None:
raise Err.get_error()
return PKCS7(p7_ptr, 1)
def load_pkcs7_bio(p7_bio):
p7_ptr = m2.pkcs7_read_bio(p7_bio._ptr())
if p7_ptr is None:
raise Err.get_error()
return PKCS7(p7_ptr, 1)
def smime_load_pkcs7(p7file):
bio = m2.bio_new_file(p7file, 'r')
if bio is None:
raise Err.get_error()
try:
(p7_ptr, bio_ptr) = m2.smime_read_pkcs7(bio)
finally:
m2.bio_free(bio)
if p7_ptr is None:
raise Err.get_error()
if bio_ptr is None:
return (PKCS7(p7_ptr, 1), None)
else:
return (PKCS7(p7_ptr, 1), BIO.BIO(bio_ptr, 1))
def smime_load_pkcs7_bio(p7_bio):
(p7_ptr, bio_ptr) = m2.smime_read_pkcs7(p7_bio._ptr())
if p7_ptr is None:
raise Err.get_error()
if bio_ptr is None:
return (PKCS7(p7_ptr, 1), None)
else:
return (PKCS7(p7_ptr, 1), BIO.BIO(bio_ptr, 1))
class Cipher:
def __init__(self, algo):
cipher = getattr(m2, algo, None)
if cipher is None:
raise ValueError, ('unknown cipher', algo)
self.cipher = cipher()
def _ptr(self):
return self.cipher
class SMIME_Error(Exception):
pass
m2.smime_init(SMIME_Error)
class SMIME:
def load_key(self, keyfile, certfile = None, callback = util.passphrase_callback):
if certfile is None:
certfile = keyfile
self.pkey = EVP.load_key(keyfile, callback)
self.x509 = X509.load_cert(certfile)
def load_key_bio(self, keybio, certbio = None, callback = util.passphrase_callback):
if certbio is None:
certbio = keybio
self.pkey = EVP.load_key_bio(keybio, callback)
self.x509 = X509.load_cert_bio(certbio)
def set_x509_stack(self, stack):
self.x509_stack = stack
def set_x509_store(self, store):
self.x509_store = store
def set_cipher(self, cipher):
self.cipher = cipher
def unset_key(self):
del self.pkey
del self.x509
def unset_x509_stack(self):
del self.x509_stack
def unset_x509_store(self):
del self.x509_store
def unset_cipher(self):
del self.cipher
def encrypt(self, data_bio, flags = 0):
if not hasattr(self, 'cipher'):
raise SMIME_Error, 'no cipher: use set_cipher()'
if not hasattr(self, 'x509_stack'):
raise SMIME_Error, 'no recipient certs: use set_x509_stack()'
pkcs7 = m2.pkcs7_encrypt(self.x509_stack._ptr(), data_bio._ptr(), self.cipher._ptr(), flags)
if pkcs7 is None:
raise SMIME_Error, Err.get_error()
return PKCS7(pkcs7, 1)
def decrypt(self, pkcs7, flags = 0):
if not hasattr(self, 'pkey'):
raise SMIME_Error, 'no private key: use load_key()'
if not hasattr(self, 'x509'):
raise SMIME_Error, 'no certificate: load_key() used incorrectly?'
blob = m2.pkcs7_decrypt(pkcs7._ptr(), self.pkey._ptr(), self.x509._ptr(), flags)
if blob is None:
raise SMIME_Error, Err.get_error()
return blob
def sign(self, data_bio, flags = 0):
if not hasattr(self, 'pkey'):
raise SMIME_Error, 'no private key: use load_key()'
if hasattr(self, 'x509_stack'):
pkcs7 = m2.pkcs7_sign1(self.x509._ptr(), self.pkey._ptr(), self.x509_stack._ptr(), data_bio._ptr(), flags)
if pkcs7 is None:
raise SMIME_Error, Err.get_error()
return PKCS7(pkcs7, 1)
else:
pkcs7 = m2.pkcs7_sign0(self.x509._ptr(), self.pkey._ptr(), data_bio._ptr(), flags)
if pkcs7 is None:
raise SMIME_Error, Err.get_error()
return PKCS7(pkcs7, 1)
def verify(self, pkcs7, data_bio = None, flags = 0):
if not hasattr(self, 'x509_stack'):
raise SMIME_Error, 'no signer certs: use set_x509_stack()'
if not hasattr(self, 'x509_store'):
raise SMIME_Error, 'no x509 cert store: use set_x509_store()'
p7 = pkcs7._ptr()
if data_bio is None:
blob = m2.pkcs7_verify0(p7, self.x509_stack._ptr(), self.x509_store._ptr(), flags)
else:
blob = m2.pkcs7_verify1(p7, self.x509_stack._ptr(), self.x509_store._ptr(), data_bio._ptr(), flags)
if blob is None:
raise SMIME_Error, Err.get_error()
return blob
def write(self, out_bio, pkcs7, data_bio = None, flags = 0):
if data_bio is None:
return m2.smime_write_pkcs7(out_bio._ptr(), pkcs7._ptr(), flags)
else:
return m2.smime_write_pkcs7_multi(out_bio._ptr(), pkcs7._ptr(), data_bio._ptr(), flags)
def text_crlf(text):
bio_in = BIO.MemoryBuffer(text)
bio_out = BIO.MemoryBuffer()
if m2.smime_crlf_copy(bio_in, bio_out):
return bio_out.read()
else:
raise Err.get_error()
def text_crlf_bio(bio_in):
bio_out = BIO.MemoryBuffer()
m2.smime_crlf_copy(bio_in, bio_out)
if m2.smime_crlf_copy(bio_in, bio_out):
return bio_out
else:
raise Err.get_error()